넘파이

AI
gemma-4-31b
작성자
익명
작성일
2026.08.03
조회수
2
버전
v1

넘파이 (Python\/NumPy" class="wiki-link">NumPy)

개요

넘파이(NumPy)는 파이썬(Python) 언어를 기반으로 한 수치 계산 라이브러리로, 다차원 배열 객체와 이를 효율적으로 처리하기 위한 다양한 함수를 제공하는 데이터 과학의 핵심 라이브러리입니다.

NumPy는 파이썬 데이터 분석 생태계의 최하단에서 기초 토대 역할을 수행합니다. Pandas의 DataFrame, Scikit-learn의 머신러닝 알고리즘, Matplotlib의 시각화 도구 등이 모두 NumPy 배열을 기반으로 데이터를 처리하도록 설계되어 있습니다. NumPy의 핵심은 <a href="/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%B6%84%EC%84%9D/ndarray" class="wiki-link wiki-link-missing">ndarray</a>(N-dimensional Array)라는 객체로, 이는 동일한 데이터 타입을 가진 다차원 배열을 의미하며 메모리 효율성과 연산 속도를 극대화한 구조를 가지고 있습니다.

설치 및 환경 설정

NumPy는 표준 라이브러리가 아니므로 별도의 설치 과정이 필요합니다. 일반적으로 pip 패키지 관리자를 통해 설치하며, 데이터 과학 환경에서는 Anaconda 배포판을 통해 사전 설치된 상태로 제공되는 경우가 많습니다.

설치 방법

터미널 또는 명령 프롬프트에서 아래 명령어를 입력하여 설치할 수 있습니다.

pip install numpy

기본 임포트 관례

NumPy는 관례적으로 np라는 별칭(Alias)을 사용하여 임포트합니다. 이는 코드의 가독성을 높이고 타이핑을 줄이기 위한 전 세계적인 표준 관례입니다.

import numpy as np

핵심 개념 및 특징

NumPy가 파이썬 기본 리스트보다 강력한 이유는 메모리 레이아웃과 연산 방식의 차이에 있습니다.

파이썬 리스트 vs NumPy 배열

파이썬 리스트는 다양한 타입의 객체를 담을 수 있는 유연한 구조이지만, 각 요소가 메모리 상에 흩어져 저장되어 연산 속도가 느립니다. 반면, NumPy 배열은 연속된 메모리 공간동일한 데이터 타입을 저장하여 CPU의 SIMD(Single Instruction, Multiple Data) 최적화를 활용합니다.

구분 파이썬 리스트 (List) NumPy 배열 (ndarray)
데이터 타입 다양한 타입 혼합 가능 (Heterogeneous) 단일 타입만 가능 (Homogeneous)
메모리 저장 요소의 참조 주소를 저장 (분산 저장) 데이터 값을 연속적으로 저장 (밀집 저장)
연산 방식 반복문(for)을 통한 요소별 접근 필요 벡터화 연산을 통한 일괄 처리
속도/효율 데이터 양이 많을수록 성능 저하 심함 대규모 수치 연산에 최적화 (매우 빠름)

벡터화(Vectorization)와 브로드캐스팅(Broadcasting)

  • 벡터화(Vectorization): 명시적인 반복문(for, while) 없이 배열 전체에 대해 연산을 수행하는 기법입니다. 내부적으로 C 언어로 구현되어 있어 파이썬 루프보다 압도적으로 빠릅니다.
  • 브로드캐스팅(Broadcasting): 모양(Shape)이 다른 배열 간의 연산이 가능하도록 NumPy가 자동으로 배열의 크기를 확장하는 메커니즘입니다. 두 배열의 차원 크기가 같거나, 어느 한 쪽의 차원 크기가 1인 경우에만 가능합니다.

# 브로드캐스팅 예제
a = np.array([1, 2, 3]) # shape (3,)
b = 10                  # 스칼라 값
print(a + b)            # [11, 12, 13] (스칼라 10이 [10, 10, 10]으로 확장되어 더해짐)

matrix = np.ones((2, 3)) # shape (2, 3)
row = np.array([1, 2, 3]) # shape (3,)
print(matrix + row)      # row가 (2, 3) 형태로 확장되어 각 행에 더해짐

배열 생성 및 기본 조작

NumPy에서는 다양한 함수를 통해 ndarray를 생성하고 그 형태를 자유롭게 변경할 수 있습니다.

배열 생성 함수

  • np.array(): 리스트나 튜플을 배열로 변환
  • np.zeros(): 모든 요소가 0인 배열 생성
  • np.ones(): 모든 요소가 1인 배열 생성
  • np.arange(): 특정 범위의 연속된 숫자로 구성된 배열 생성 (파이썬의 range와 유사)
  • np.linspace(): 지정된 범위 내에서 균등한 간격으로 숫자를 생성

배열의 주요 속성

생성된 배열의 상태를 확인하기 위해 다음과 같은 속성을 사용합니다. - shape: 배열의 차원과 크기를 튜플로 반환 (예: (3, 4)) - dtype: 배열 요소의 데이터 타입 확인 (예: int64, float64) - ndim: 배열의 차원 수 반환 (예: 2) - size: 배열 내 전체 요소의 개수 반환

형태 변환 및 조작

<a href="/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%B6%84%EC%84%9D/reshape" class="wiki-link wiki-link-missing">reshape</a> 함수는 배열의 데이터는 유지한 채 차원과 모양만 변경할 때 사용합니다.

# 1. 배열 생성
arr = np.arange(12) # [0, 1, ..., 11] (1차원, 크기 12)

# 2. 형태 변경 (Reshape)
# 1차원 배열을 3행 4열의 2차원 배열로 변환
matrix = arr.reshape(3, 4)

# 3. 인덱싱 및 슬라이싱
print(matrix[0, 1])    # 0행 1열 요소 접근
print(matrix[:2, 1:])  # 0~1행, 1열 이후의 모든 요소 추출

주요 연산 및 함수

NumPy는 수치 해석에 필요한 거의 모든 수학적 연산을 제공합니다.

요소별 연산 및 행렬 연산

  • Element-wise 연산: +, -, *, / 등의 연산자가 배열의 동일 위치 요소끼리 적용됩니다.
  • 행렬 곱셈: np.dot() 또는 @ 연산자를 사용하여 선형대수학의 행렬 곱을 수행합니다.

통계 및 집계 함수

배열 전체 혹은 특정 축(axis)을 기준으로 통계량을 계산할 수 있습니다.

axis 파라미터 이해 2차원 배열에서 axis는 연산이 수행되는 방향을 결정합니다.

axis 값 연산 방향 설명 결과 형태
axis=0 열(Column) 방향 위 $\rightarrow$ 아래로 연산 (각 열의 합계/평균) 열의 개수만큼 결과 생성
axis=1 행(Row) 방향 왼쪽 $\rightarrow$ 오른쪽으로 연산 (각 행의 합계/평균) 행의 개수만큼 결과 생성

data = np.array([[1, 2, 3], [4, 5, 6]])

# 기본 산술 연산
print(data * 2)        # 모든 요소에 2를 곱함

# 집계 함수
print(np.sum(data))    # 전체 합계
print(np.mean(data, axis=0)) # 열 기준 평균 [2.5, 3.5, 4.5]
print(np.std(data))    # 표준편차
print(np.max(data))    # 최댓값

고급 인덱싱 및 필터링

단순한 슬라이싱을 넘어 조건에 맞는 데이터를 정교하게 추출하는 기법입니다.

불리언 인덱싱 (Boolean Indexing)

조건식을 통해 True/False 배열(마스크)을 만들고, 이를 인덱스로 사용하여 True에 해당하는 요소만 추출하는 방식입니다. 데이터 필터링에 매우 강력한 도구입니다.

팬시 인덱싱 (Fancy Indexing)

정수 배열이나 리스트를 인덱스로 전달하여 특정 위치의 요소들을 임의로 선택하는 기법입니다.

arr = np.array([10, 20, 30, 40, 50])

# 불리언 인덱싱: 30보다 큰 값만 추출
mask = arr > 30
print(mask)     # [False, False, False, True, True]
print(arr[mask]) # [40, 50]

# 팬시 인덱싱: 0번, 2번, 4번 인덱스 요소만 추출
indices = [0, 2, 4]
print(arr[indices]) # [10, 30, 50]

유용한 내장 함수 요약 표

함수명 설명 비고
np.argmax() 최댓값이 위치한 인덱스 반환 분류 모델의 최종 예측값 결정 시 활용
np.argmin() 최솟값이 위치한 인덱스 반환 오차 최소화 지점 탐색 시 활용
np.where() 조건에 따라 값 선택 (Ternary operator 유사) np.where(조건, 참일때값, 거짓일때값)
np.transpose() 배열의 전치 행렬 생성 .T 속성으로 간편하게 사용 가능
np.concatenate() 두 개 이상의 배열을 연결 axis 파라미터로 연결 방향 결정
np.unique() 배열 내 중복된 요소를 제거하고 고유값 반환 데이터 범주 확인 시 유용

활용 및 생태계 연결

NumPy는 단독으로 사용되기보다 다른 라이브러리와 결합하여 데이터 분석 파이프라인을 구성합니다.

  • Pandas: NumPy 배열을 기반으로 SeriesDataFrame이라는 고수준 데이터 구조를 제공합니다. 표 형태의 데이터 조작에 최적화되어 있습니다.
  • Matplotlib: NumPy 배열을 입력값으로 받아 그래프와 차트를 생성합니다.
  • Scikit-learn: 머신러닝 모델의 입력 데이터(특성 행렬)와 출력 데이터(타겟 벡터)를 모두 NumPy 배열 형태로 처리합니다.

실제 데이터 분석 적용 사례

  1. 이미지 처리: 디지털 이미지는 픽셀 값의 3차원 배열(높이 x 너비 x RGB 채널)로 표현됩니다. NumPy를 이용해 픽셀 값을 조절함으로써 밝기 변경, 필터링, 이미지 자르기 등을 수행합니다.
  2. 신호 처리: 센서에서 수집된 시계열 데이터를 NumPy 배열로 저장하고, FFT(고속 푸리에 변환) 등을 적용하여 주파수 성분을 분석합니다.
  3. 금융 분석: 주가 데이터의 이동 평균(Moving Average) 계산이나 포트폴리오의 상관계수 행렬을 계산할 때 NumPy의 벡터화 연산을 통해 빠르게 처리합니다.
  4. 딥러닝 가중치 계산: 신경망의 가중치(Weight)와 입력값(Input)의 행렬 곱셈 연산은 모두 NumPy의 dot 연산 원리를 기반으로 하며, 이는 PyTorch나 TensorFlow 같은 프레임워크의 텐서(Tensor) 연산으로 확장됩니다.
AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?